package com.lt.lumentracks.utils;


import com.fasterxml.jackson.core.JsonProcessingException;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

@Slf4j
public class jwtUtils {

    private static final String signKey = "My-last32-byte-secret-key-SignAlgorithm_swl"; //指定签名密钥
    private static final SecretKey secretKey = Keys.hmacShaKeyFor(signKey.getBytes(StandardCharsets.UTF_8)); //创建一个用于HMAC-SHA算法的密钥对象
    private static final Long expire = 43200000L; //指定令牌过期时间为12个小时(3600毫秒*1000*12)


    /**
     *生成jwt令牌
     * @param claims JWT中第二部分负载payload中存储的内容
     * return
     */
    public static String GenerateJwt(Map<String, Object> claims) throws JsonProcessingException {

        String MyJwt = Jwts.builder()
                .signWith(secretKey) //1.指定算法与签名
                .setClaims(claims) //2.添加自定义内容
                .setExpiration(new Date((System.currentTimeMillis() + expire))) //3.设置令牌的有效期
                .compact();

        System.out.println("生成的jwt令牌为：" + MyJwt);
        return MyJwt;
    }



    /**
     *解析jwt令牌
     * @param jwt JWT令牌
     * return JWT第二部分负载payload中存储的内容
     */
    public static Claims ParseJwt(String jwt){

        Claims claims = Jwts.parserBuilder()
                .setSigningKey(secretKey) // 使用签名密钥
                .build()
                .parseClaimsJws(jwt) // 解析令牌
                .getBody();

        return claims;
    }

}
